
package br.pb.sistcomp.controller;

import br.pb.sistcomp.dao.MensagemDaoImpl;
import br.pb.sistcomp.entity.Mensagem;
import br.pb.sistcomp.exception.ErroAoRemoverException;
import br.pb.sistcomp.exception.ErroAoSalvarException;
import br.pb.sistcomp.util.MessagesUtil;
import java.util.Date;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;

/**
 * Class that represents an controller in the system
 *
 * @author Kawe Ramon, kawe.ramon@dce.ufpb.br
 * @version 1.0
 *
 * Copyright (C) 2011 SistComp.
 */
@ManagedBean
@SessionScoped
public class MensagemController {
    
    private Mensagem mensagem;
    private List<Mensagem> mensagens;
    private MensagemDaoImpl mensagemDAO;
    private DataModel listaModel;
   
    /*
     * Construtor para criar uma nova instância de MensagemDaoImpl
     */
    public MensagemController(){
        this.mensagemDAO = new MensagemDaoImpl();
        mensagem = new Mensagem();
        listaModel = new ListDataModel(mensagemDAO.listarTodas());
    }
    
    public void setMensagem(Mensagem m){
        this.mensagem = m;
    }
    
    public Mensagem getMensagem(){
        return this.mensagem;
    }
    /*
     * Método para inserir mensagem chamando MensagemDaoImpl
     * @return String para informar qual página ir
     */
    public String inserirMensagem() throws ErroAoSalvarException{
        try {
            mensagem.setData(new Date());
            mensagem.setHora(new Date());
            mensagemDAO.cadastrarMensagem(mensagem);
            
            MessagesUtil.addInfoMsg("Mensagem inserida com sucesso");
        
            mensagem = new Mensagem();
        } catch (Exception e) {
            throw new ErroAoSalvarException("Erro ao salvar a mensagem");
        }
            
        return "cadastrarMensagem";
        
    }
    
    /*
     * Método para remover mensagem chamando MensagemDaoImpl
     * @param int para saber qual mensagem remover
     * @return String com a informação da próxima página
     */
    public String removerMensagem() throws ErroAoRemoverException{
        try {
            Mensagem m = (Mensagem) listaModel.getRowData();
            mensagemDAO.removerMensagem(m);
            MessagesUtil.addInfoMsg("Mensagem removida com sucesso!");
        } catch (Exception e) {
            throw new ErroAoRemoverException("Erro ao remover a mensagem");
        }
        
        return "listarTodasMensagens";
               
    }
    
    public String removerRecebidas() throws ErroAoRemoverException{
        try {
            Mensagem m = (Mensagem) listaModel.getRowData();
            mensagemDAO.removerMensagem(m);
            MessagesUtil.addInfoMsg("Mensagem removida com sucesso!");
        } catch (Exception e) {
            throw new ErroAoRemoverException("Erro ao remover a mensagem");
        }
        
        return "listarMensangensRecebidas";
    }
    
    public String removerEnviadas() throws ErroAoRemoverException{
        try {
            Mensagem m = (Mensagem) listaModel.getRowData();
            mensagemDAO.removerMensagem(m);
            MessagesUtil.addInfoMsg("Mensagem removida com sucesso!");
        } catch (Exception e) {
            throw new ErroAoRemoverException("Erro ao remover a mensagem");
        }
        
        return "listarMensangesEnviadas";
    }
    
    /*Método responsável por listar todas as mensagens
     * se as mensagens for nulas chama MensagemDaoImpl para listar todas as mensagens
     * @return Lista de todas as mensagens
     * 
     */
    public List<Mensagem> listarTodas(){
        
        
        mensagens = mensagemDAO.listarTodas();
        
        return mensagens;
        
    }
    /*
     * Método responsável por listar todas as mensagens enviadas
     * @return lista das mensagens enviadas
     */
    public List<Mensagem> listarMensagensEnviadas(){
       
        mensagens = mensagemDAO.listarMensagensEnviadas();
        
        
        return mensagens;
    }
    
    /*Método para listar mensagens recebidas
     * @return lista de todas as mensagens recebidas
     * 
     */
    public List<Mensagem> listarMensagensRecebidas(){
        
        mensagens = mensagemDAO.listarMensagensRecebidas();
        
        
        return mensagens;
    }
    
    
    
}
